package com.hc.service;


import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hc.bean.SysRoleBean;
import com.hc.bean.SysRoleMenuBean;
import com.hc.mapper.SysRoleMapper;
import com.hc.mapper.SysRoleMenuMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class SysRoleServiceImpl implements  SysRoleService{
    @Autowired
    SysRoleMapper sysRoleMapper;

    @Autowired
    SysRoleMenuMapper sysRoleMenuMapper;

    @Override
 //   @Transactional//
    //  在调用此方法前，spring得到sqlsession对象
    //   在方法内部调用mapper中的方法，用到的就是调用此方法前得到session对象，执行sql语句
    //如果该方法抛出了运行时异常，会调用sqlsesion对象的rollback方法回滚事务，如果方法正党执行完毕，就会提交事务
    //这种技术是面向切面编程执行，即AOP技术，义层逻辑是动态代理技术
    @Transactional


    public int insertData(SysRoleBean sysRoleBean) {
        //往角色表中写入数据 tz_sys_role  AOP技术，面向切编程

            int res = sysRoleMapper.insertData(sysRoleBean);

            //事务
            System.out.println("往角色表中写数据的结果为:" + res);

            int roleId = sysRoleBean.getRole_id();//拿到insert语句执行后的主键值

            //往角色与菜单的关联表tz_sys_role_menu表中写数据
            for (Integer menuId : sysRoleBean.getMenuIdList()) {
                SysRoleMenuBean sysRoleMenuBean = new SysRoleMenuBean();
                sysRoleMenuBean.setMenu_id(menuId);
                sysRoleMenuBean.setRole_id(roleId);
                sysRoleMenuMapper.insertData(sysRoleMenuBean);//往角色与菜单的关联表tz_sys_role_menu表中写数据

            }

        return res;
    }

    @Override
    public List<SysRoleBean> queryData(SysRoleBean sysRoleBean) {
        return sysRoleMapper.queryData(sysRoleBean);
    }

    @Override
    public PageInfo<SysRoleBean> queryDataByPage(SysRoleBean sysRoleBean, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum,pageSize);
         List<SysRoleBean>  list =  sysRoleMapper.queryData(sysRoleBean) ;

         PageInfo<SysRoleBean> pageInfo = new PageInfo<>(list);

        return pageInfo;
    }

    @Override
    public int updateData(SysRoleBean sysRoleBean) {


        int res = sysRoleMapper.insertData(sysRoleBean);

        //事务


        int roleId = sysRoleBean.getRole_id();//拿到insert语句执行后的主键值

        //往角色与菜单的关联表tz_sys_role_menu表中写数据
        for (Integer menuId : sysRoleBean.getMenuIdList()) {
            SysRoleMenuBean sysRoleMenuBean = new SysRoleMenuBean();
            sysRoleMenuBean.setMenu_id(menuId);
            sysRoleMenuBean.setRole_id(roleId);
            sysRoleMenuMapper.insertData(sysRoleMenuBean);//往角色与菜单的关联表tz_sys_role_menu表中写数据

        }
        return 0;
    }
}
